home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Information / CSMP Digest / volume 3 / csmp-digest-v3-094 < prev    next >
Text File  |  1995-12-31  |  77KB  |  2,046 lines

  1. C.S.M.P. Digest             Fri, 21 Apr 95       Volume 3 : Issue 94
  2.  
  3. Today's Topics:
  4.  
  5.         ANNOUNCE: The Mops Page (Programming lang.)
  6.         Accessing large arrays
  7.         BSP Tree Demo Application and Source
  8.         CW's SIOUX don't do the job
  9.         Determining if GDevice in color or grayscale mode?
  10.         Do games use WaitNextEvent
  11.         FYI QuickTime 2.0 Dev Guide for Macintosh on Internet (ftp)
  12.         File manipulation??
  13.         Macintosh Drag and Drop
  14.         No DriverInstall() ???
  15.         Saving check boxes?
  16.         What are the names of my serial ports? (CTB)
  17.  
  18.  
  19.  
  20. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  21. (pottier@clipper.ens.fr).
  22.  
  23. The digest is a collection of article threads from the internet newsgroup
  24. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  25. regularly and want an archive of the discussions.  If you don't know what a
  26. newsgroup is, you probably don't have access to it.  Ask your systems
  27. administrator(s) for details.  If you don't have access to news, you may
  28. still be able to post messages to the group by using a mail server like
  29. anon.penet.fi (mail help@anon.penet.fi for more information).
  30.  
  31. Each issue of the digest contains one or more sets of articles (called
  32. threads), with each set corresponding to a 'discussion' of a particular
  33. subject.  The articles are not edited; all articles included in this digest
  34. are in their original posted form (as received by our news server at
  35. nef.ens.fr).  Article threads are not added to the digest until the last
  36. article added to the thread is at least two weeks old (this is to ensure that
  37. the thread is dead before adding it to the digest).  Article threads that
  38. consist of only one message are generally not included in the digest.
  39.  
  40. The digest is officially distributed by two means, by email and ftp.
  41.  
  42. If you want to receive the digest by mail, send email to listserv@ens.fr
  43. with no subject and one of the following commands as body:
  44.     help                                Sends you a summary of commands
  45.     subscribe csmp-digest Your Name     Adds you to the mailing list
  46.     signoff csmp-digest                 Removes you from the list
  47. Once you have subscribed, you will automatically receive each new
  48. issue as it is created.
  49.  
  50. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  51. Questions related to the ftp site should be directed to
  52. scott.silver@dartmouth.edu.
  53.  
  54. -------------------------------------------------------
  55.  
  56. >From jayfar@netaxs.com (Jay Farrell)
  57. Subject: ANNOUNCE: The Mops Page (Programming lang.)
  58. Date: Mon, 03 Apr 1995 22:49:02 -0400
  59. Organization: Jayfar's Web
  60.  
  61. Mops 2.5 (Michael's Object-oriented Programming System) is Michael Hore's
  62. powerful programming language/development environment for the Macintosh. 
  63. The Mops language is based on Forth by way of Neon, a defunct commercial
  64. Mac product.  Mops has added OOP extensions with multiple inheritance and
  65. numerous other enhancements.
  66.  
  67. Mops doesn't directly compile into PPC code (next version, yes), but comes
  68. w/ a PPC assembler/disassembler so that you can write PPC native modules.
  69.  
  70. Mops is freeware and in the public domain.
  71.  
  72. To ftp Mops 2.5 and find valuable Mops resources for novice to advanced
  73. programmers, see The Mops Page:
  74.  
  75.                 http://www.netaxs.com/~jayfar/mops.html
  76.  
  77.               *** Just Added:  The Mops FAQ - April '95 ***
  78.  
  79. Jayfar
  80.  
  81. - -------------------------------------------------------------------
  82. Jay Farrell                     <URL:http://www.netaxs.com/~jayfar/>
  83. jayfar@netaxs.com
  84. Philadelphia, Pennsylvania, U.S.A.
  85. - -------------------------------------------------------------------
  86.      "Wonder How A Po' M*ther F*cker Feel"
  87.  
  88.                                    -- Joshua Jordan (1920-1993)
  89.  
  90. ---------------------------
  91.  
  92. >From wuttke@stein.teuto.de (Manfred Wuttke)
  93. Subject: Accessing large arrays
  94. Date: Mon, 03 Apr 1995 17:01:35 +0200
  95. Organization: -
  96.  
  97. Hello!
  98.  
  99. Please take a look on this code:
  100.  
  101. PROGRAM TestLArray;
  102.  
  103.  TYPE
  104.   LongArray = PACKED ARRAY[0..0] OF LongInt;
  105.   LArrayPtr = ^LongArray;
  106.  
  107.  VAR
  108.   p: Ptr;
  109.   l: LongInt;
  110.  
  111. BEGIN
  112.  DebugStr('start');
  113.  p := NewPtr(60000);
  114.  FOR l := 0 TO (60000 DIV 4) - 1 DO
  115.   LArrayPtr(p)^[l] := $FFFF;
  116.  DisposePtr(p);
  117. END.
  118.  
  119. It crashes on my PowerMacintosh 6100. I use THINK Pascal 4.0.2 and System
  120. 7.5. All compiler options are turned off. The program works if the array is
  121. smaller than 32K. Does anybody know why this little program crashes?
  122. Thank you,
  123.      -Matthias (wuttke@stein.teuto.de)
  124.  
  125. +++++++++++++++++++++++++++
  126.  
  127. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  128. Date: Tue, 4 Apr 1995 13:51:42 +1200 (NZDT)
  129. Organization: (none)
  130.  
  131. wuttke@stein.teuto.de (Manfred Wuttke) writes:
  132. > Hello!
  133. >
  134. > Please take a look on this code:
  135. >
  136. > PROGRAM TestLArray;
  137. >
  138. >  TYPE
  139. >   LongArray = PACKED ARRAY[0..0] OF LongInt;
  140. >   LArrayPtr = ^LongArray;
  141. >
  142. >  VAR
  143. >   p: Ptr;
  144. >   l: LongInt;
  145. >
  146. > BEGIN
  147. >  DebugStr('start');
  148. >  p := NewPtr(60000);
  149. >  FOR l := 0 TO (60000 DIV 4) - 1 DO
  150. >   LArrayPtr(p)^[l] := $FFFF;
  151. >  DisposePtr(p);
  152. > END.
  153. >
  154. > It crashes on my PowerMacintosh 6100. I use THINK Pascal 4.0.2 and System
  155. > 7.5. All compiler options are turned off. The program works if the array is
  156. > smaller than 32K. Does anybody know why this little program crashes?
  157.  
  158. It crashes because THINK Pascal is using a 16x16->16 multiply for the
  159. array indexing calculation.
  160.  
  161. I really don't know why they do this because even the original 68000 multiply
  162. is a 16x16->32 calculation, which would work fine for a LongArray up to 128K or
  163. 256K in size (depending on whether they used signed or unsigned), and would in
  164. general work for any array where there wre fewer than 32K (or 64K) elements,
  165. each of up to 32K or 64K in size.
  166.  
  167. What you'll need to do (since bitching to Symantec about this long since ceased
  168. to be useful) is to declare the array to have more than 32K elements, thus
  169. forcing the compiler to use a 32x32 multiply.
  170.  
  171.  TYPE
  172.   LongArray = PACKED ARRAY[0..maxlongint] OF LongInt;
  173.  
  174. -- Bruce
  175.  
  176. ---------------------------
  177.  
  178. >From bwade@graphics.cornell.edu (Bretton Wade)
  179. Subject: BSP Tree Demo Application and Source
  180. Date: Thu, 06 Apr 1995 04:05:12 -0400
  181. Organization: Cornell Program of Computer Graphics
  182.  
  183. I have placed a demonstration application for Binary Space Partitioning
  184. (BSP) Trees at the URL:
  185.  
  186.    ftp://ray.graphics.cornell.edu/pub/bsptree/BSP_Tree_Demo_1.0.sea.hqx
  187.  
  188. This distribution includes a "fat" application for Apple Macintosh
  189. computers, and all the source code used to build it in Metrowerks
  190. CodeWarrior 5.5 format.
  191.  
  192. The Distribution contains pointers to the BSP Tree FAQ should you like to
  193. know more.
  194.  
  195. -- 
  196. Bretton Wade (bwade@graphics.cornell.edu)
  197. http://www.graphics.cornell.edu/~bwade/
  198.  
  199. ---------------------------
  200.  
  201. >From gagne@phy.ulaval.ca (Philippe Gagne)
  202. Subject: CW's SIOUX don't do the job
  203. Date: Thu, 30 Mar 1995 16:48:56 GMT
  204. Organization: COPL, Universite Laval, Qc, Canada
  205.  
  206. I recently bought CodeWarior 5.0 and I want to port to it all my little
  207. programs I wrote in ThinkC. CW seems good but the console package (SIOUX)
  208. does not looks very professional. Is there some alternatives?
  209.  
  210.  
  211. - -
  212. ========================================================================
  213. | Philippe Gagne         |   "If you understand what you're doing,     |
  214. | COPL, Universite Laval |    you're not learning anything."           |
  215. | Quebec, Canada         |        -- A. L.                             |
  216. | gagne@phy.ulaval.ca    |                                             |
  217. ========================================================================
  218.  
  219.    
  220.  
  221.  
  222.  
  223. +++++++++++++++++++++++++++
  224.  
  225. >From catambay@aol.com (Bill the Cat)
  226. Date: Thu, 30 Mar 1995 13:30:53 -0800
  227. Organization: Starfleet Academy
  228.  
  229. In article <D69IpL.3q3@athena.ulaval.ca>, gagne@phy.ulaval.ca wrote:
  230.  
  231. -> I recently bought CodeWarior 5.0 and I want to port to it all my little
  232. -> programs I wrote in ThinkC. CW seems good but the console package (SIOUX)
  233. -> does not looks very professional. Is there some alternatives?
  234. -> 
  235. -> 
  236. -> ---
  237. -> ========================================================================
  238. -> | Philippe Gagne         |   "If you understand what you're doing,     |
  239. -> | COPL, Universite Laval |    you're not learning anything."           |
  240. -> | Quebec, Canada         |        -- A. L.                             |
  241. -> | gagne@phy.ulaval.ca    |                                             |
  242. -> ========================================================================
  243. -> 
  244. ->    
  245.  
  246. You can write your own package.  I believe the source for Sioux comes with CW.
  247.  
  248. _____________________________________________________________________
  249. Bill Catambay
  250. Pascal Programmer on Macintosh and Open VMS
  251.  
  252.               />
  253.              //   The purpose of software engineering  
  254.      (//////[O]>=========================================-
  255.              \\    is to manage complexity, not to create it.
  256.               \>
  257.  
  258. ____________________________________________________________________
  259.         
  260.  
  261. +++++++++++++++++++++++++++
  262.  
  263. >From ourx124@deere.com (Juan Ingles)
  264. Date: Fri, 31 Mar 1995 01:31:50 GMT
  265. Organization: Proteus Ventures, Inc.
  266.  
  267. In article <D69IpL.3q3@athena.ulaval.ca>, gagne@phy.ulaval.ca wrote:
  268.  
  269. > I recently bought CodeWarior 5.0 and I want to port to it all my little
  270. > programs I wrote in ThinkC. CW seems good but the console package (SIOUX)
  271. > does not looks very professional. Is there some alternatives?
  272. [snip]   
  273.  
  274. ( can't resist... ) 
  275.  
  276. [begin rhetorical question w/soapbox overtones]
  277. Just what is your definition of "professional looking" when it comes to
  278. putting a console interface on Macintosh program? 
  279. ;)
  280. [end rhetorical question]
  281.  
  282.  
  283. You can customize the CodeWarrior SIOUX package to a slight degree. You
  284. can get rid of the status display, change the font, get rid of the menus,
  285. get rid of the "Save changes" dialog, and a few other other things. Look
  286. in the SIOUX.h file for a complete list of the settings and instructions
  287. on how to do this.
  288.  
  289. If that doesn't do it for you, you can write your own console package and
  290. substitute it for SIOUX. I believe instructions (hints anyway) for doing
  291. that are in SIOUX.h and console.stubs.c.
  292.  
  293. I heard someone say (Avi Rappoport maybe?) that they were going to
  294. document the SIOUX package better in the future. Maybe they'll do it for
  295. CW 6.
  296.  
  297. Juan.
  298.  
  299. +++++++++++++++++++++++++++
  300.  
  301. >From gagne@phy.ulaval.ca (Philippe Gagne)
  302. Date: Fri, 31 Mar 1995 17:10:41 GMT
  303. Organization: COPL, Universite Laval, Qc, Canada
  304.  
  305.  
  306. >In article <D69IpL.3q3@athena.ulaval.ca>, gagne@phy.ulaval.ca wrote:
  307. >
  308. >> I recently bought CodeWarior 5.0 and I want to port to it all my little
  309. >> programs I wrote in ThinkC. CW seems good but the console package (SIOUX)
  310. >> does not looks very professional. Is there some alternatives?
  311. >[snip]   
  312. >
  313. >( can't resist... ) 
  314. >
  315. >[begin rhetorical question w/soapbox overtones]
  316. >Just what is your definition of "professional looking" when it comes to
  317. >putting a console interface on Macintosh program? 
  318. >;)
  319. >[end rhetorical question]
  320. >
  321.  
  322. I always liked philosophy, so I'll explain my definition of a good console
  323. interface.
  324.  
  325. All day long I work on a Sun workstation, hoping to finish my PhD someday.
  326. When the night comes, I go home and tries to forget my working day by
  327. trying the same simulation on my Macintosh.
  328.  
  329. To me, a good console package would simulate an openwin cmdtool. SIOUX has
  330. the scrollbars (that's good), but the writing to it seems very slow (when
  331. you printf something you have the feeling of a 2400 bauds terminal). I
  332. hate the status display.
  333.  
  334. In ThinkC there was a way to have a pop-up command-line interface. Is there
  335. something equivalent in SIOUX?
  336.  
  337. > You can customize the CodeWarrior SIOUX package to a slight degree. You
  338. > can get rid of the status display, change the font, get rid of the menus,
  339. > get rid of the "Save changes" dialog, and a few other other things. Look
  340. > in the SIOUX.h file for a complete list of the settings and instructions
  341. > on how to do this.
  342.  
  343. So i will look at that hoping it is not too complicated.
  344.  
  345. - -
  346. ========================================================================
  347. | Philippe Gagne         |   "If you understand what you're doing,     |
  348. | COPL, Universite Laval |    you're not learning anything."           |
  349. | Quebec, Canada         |        -- A. L.                             |
  350. | gagne@phy.ulaval.ca    |                                             |
  351. ========================================================================
  352.  
  353.    
  354.  
  355.  
  356.  
  357. +++++++++++++++++++++++++++
  358.  
  359. >From mwron@aol.com (MW Ron)
  360. Date: 30 Mar 1995 21:48:27 -0500
  361. Organization: America Online, Inc. (1-800-827-6364)
  362.  
  363.  gagne@phy.ulaval.ca (Philippe Gagne) Writes:
  364.  
  365. >I recently bought CodeWarior 5.0 and I want to port to it all my little
  366. >programs I wrote in ThinkC. CW seems good but the console package (SIOUX)
  367. >does not looks very professional.
  368.  
  369. Hi Philippe,  You can modify the look of the SIOUX interface some useing
  370. the structure in the SIOUX.H file   by setting them in your main file   
  371.  
  372. SIOUXSettings.tabspaces = 4  for example.  It might make a differece.  It
  373. is constantly improving in robustness and in ease of use.
  374.  
  375. Ron
  376.  
  377. METROWERKS                   Ron Liechty
  378. "Software at Work"    MWRon@metrowerks.com
  379.  
  380.    METROWERKS               Ron Liechty
  381. "Software at Work"    MWRon@metrowerks.com
  382.  
  383. +++++++++++++++++++++++++++
  384.  
  385. >From catambay@aol.com (Bill the Cat)
  386. Date: Fri, 31 Mar 1995 13:44:26 -0800
  387. Organization: Starfleet Academy
  388.  
  389. -> 
  390. -> I heard someone say (Avi Rappoport maybe?) that they were going to
  391. -> document the SIOUX package better in the future. Maybe they'll do it for
  392. -> CW 6.
  393. -> 
  394.  
  395. That would be most excellent.  :)
  396.  
  397. _____________________________________________________________________
  398. Bill Catambay
  399. Pascal Programmer on Macintosh and Open VMS
  400.  
  401.               />
  402.              //   The purpose of software engineering  
  403.      (//////[O]>=========================================-
  404.              \\    is to manage complexity, not to create it.
  405.               \>
  406.  
  407. ____________________________________________________________________
  408.         
  409.  
  410. +++++++++++++++++++++++++++
  411.  
  412. >From mwron@aol.com (MW Ron)
  413. Date: 31 Mar 1995 14:45:29 -0500
  414. Organization: America Online, Inc. (1-800-827-6364)
  415.  
  416. ourx124@deere.com (Juan Ingles) Writes:
  417.  
  418. >I heard someone say (Avi Rappoport maybe?) that they were going to
  419. >document the SIOUX package better in the future. Maybe they'll do it for
  420. >CW 6.
  421.  
  422. Yes this should be done in CW6.
  423.  
  424.  
  425.    METROWERKS               Ron Liechty
  426. "Software at Work"    MWRon@metrowerks.com
  427.  
  428. +++++++++++++++++++++++++++
  429.  
  430. >From ourx124@deere.com (Juan Ingles)
  431. Date: Sat, 1 Apr 1995 02:32:53 GMT
  432. Organization: Proteus Ventures, Inc.
  433.  
  434. In article <D6BEDv.EH1@athena.ulaval.ca>, gagne@phy.ulaval.ca wrote:
  435. [snip]
  436. > All day long I work on a Sun workstation, hoping to finish my PhD someday.
  437. > When the night comes, I go home and tries to forget my working day by
  438. > trying the same simulation on my Macintosh.
  439. I was asking rhetorically because I figured that you had a good excuse.
  440. Sounds good enough for me. BTW, beer helps with the forgetting part ;)
  441.  
  442. [snip]
  443. > To me, a good console package would simulate an openwin cmdtool. SIOUX has
  444. > the scrollbars (that's good), but the writing to it seems very slow (when
  445. > you printf something you have the feeling of a 2400 bauds terminal).
  446. There used to be a function that changed the buffer mode for SIOUX that
  447. greatly improved the performance. I do not know what it is off-hand.
  448. Anybody out there know? Ron?
  449.  
  450. > I hate the status display.
  451. try:
  452.       tSIOUXSettings mySIOUXSettings =
  453. {TRUE,TRUE,FALSE,TRUE,FALSE,0,0,80,24,0,0,monaco,9,normal};
  454.       SIOUXSettings = mySIOUXSettings;
  455.  
  456. This should be done before your first write to the console.
  457.  
  458. [snip]
  459. > In ThinkC there was a way to have a pop-up command-line interface. Is there
  460. > something equivalent in SIOUX?
  461.  
  462.   argc = ccommand(&argv);
  463.  
  464. lets you type in arguments or redirect with files. Don't forget to
  465. #include <console.h>
  466.  
  467. You might also think about creating mpw tools instead of applications.
  468. That would give you a command line interface and redirection to your
  469. heart's content. The only drawback is that currently you can't create PPC
  470. tools.
  471.  
  472.  
  473. Juan.
  474.  
  475. -- 
  476. ourx124@deere.com (Juan Ingles)
  477.  
  478. +++++++++++++++++++++++++++
  479.  
  480. >From THUNDERONE@news.delphi.com (THUNDERONE@DELPHI.COM)
  481. Date: 1 Apr 1995 21:42:27 -0500
  482. Organization: Delphi Internet Services Corporation
  483.  
  484. catambay@aol.com (Bill the Cat) writes:
  485.  
  486. >In article <D69IpL.3q3@athena.ulaval.ca>, gagne@phy.ulaval.ca wrote:
  487.  
  488. >-> I recently bought CodeWarior 5.0 and I want to port to it all my little
  489. >-> programs I wrote in ThinkC. CW seems good but the console package (SIOUX)
  490. >-> does not looks very professional. Is there some alternatives?
  491. >-> 
  492. >-> 
  493.  
  494. >You can write your own package.  I believe the source for Sioux comes with CW.
  495.  
  496. You can write your own package, but the source is _not_ available.
  497.  
  498. ________________.______.._____...___....._.....................
  499. Chris Thomas, thunderone@delphi.com, friend of the devil
  500. "  *** you have missed the point entirely ***  "
  501.  
  502. +++++++++++++++++++++++++++
  503.  
  504. >From rossb@klang.latrobe.edu.au (Ross Bencina)
  505. Date: Tue, 4 Apr 1995 04:19:25 GMT
  506. Organization: La Trobe University
  507.  
  508. My problem with SIOUX (and the Think console) is that there is no way (as  
  509. far as I know) of setting up an event loop to process AppleEvents. I have  
  510. ported a number of tools from Unix, and replaced their shell interface  
  511. with AppleScript support, in one case I replaced an embedded scripting  
  512. language with apple script hooks (including runtime aete generation).
  513.  
  514. I found CW's ANSI stubs incredibly useful, but I had to write a new  
  515. console interface (OK, not rocket science) to get it working. EventManager  
  516. hooks in SIOUX would be a really cool thing!
  517.  
  518. Ross B.
  519.  
  520. +++++++++++++++++++++++++++
  521.  
  522. >From dirk@gaga.maschinenbau.uni-dortmund.de (Dirk Froehling)
  523. Date: Wed, 05 Apr 1995 15:46:56 +0200
  524. Organization: UniDO
  525.  
  526. In article <1995Apr4.041925.39@lugb.latrobe.edu.au>,
  527. rossb@klang.latrobe.edu.au (Ross Bencina) wrote:
  528.  
  529. > My problem with SIOUX (and the Think console) is that there is no way (as  
  530. > far as I know) of setting up an event loop to process AppleEvents. I have  
  531. > ported a number of tools from Unix, and replaced their shell interface  
  532. > with AppleScript support, in one case I replaced an embedded scripting  
  533. > language with apple script hooks (including runtime aete generation).
  534.  
  535. Why didn't you try this (copied from SIOUX.h):
  536.  
  537. /*
  538.  * extern void SIOUXHandleOneEvent(EventRecord *initialevent);
  539.  *
  540.  * Tells SIOUX to handle one event.  If initialevent is NULL, then SIOUX
  541.  * will poll the eventqueue for an event.  For applications which wish to
  542.  * use an embedded SIOUX window, call this function at the beginning of
  543.  * your eventloop, and pass it your current event ...
  544.  *
  545.  * EventRecord *userevent: The user's event from their call to
  546. Get/WaitNextEvent.
  547.  * returns Boolean:     Was the event handled by SIOUX?
  548.  */
  549.  
  550. extern Boolean SIOUXHandleOneEvent(EventRecord *userevent);
  551.  
  552. If you need to handle the SIOUX menus too, you can find the function names
  553. in the link map.
  554.  
  555. -- 
  556. | Dirk Froehling - Germany, Uni Dortmund, FB Maschinenbau, LS Mechanik |
  557. | dirk@gaga.maschinenbau.uni-dortmund.de            GEnie: D.FROEHLING |
  558. ---------------------------
  559.  
  560. >From winter@ai.rl.af.mil (Jim Wintermyre)
  561. Subject: Determining if GDevice in color or grayscale mode?
  562. Date: Mon, 3 Apr 1995 23:43:42 GMT
  563. Organization: Rome Laboratory
  564.  
  565. Does anyone know of a simple way to determine if a given indexed
  566. GDevice is in color or grayscale mode?  I tried the tip in the April
  567. '93 MacTech, but that only tells you whether you're in color/grayscale
  568. mode or *black and white* - it can't tell the difference between, say,
  569. 8-bit grayscale and 8-bit color.
  570.  
  571. Thanks,
  572. Jim
  573.  
  574. winter@ai.rl.af.mil
  575. wintermyrej@rl.af.mil
  576.  
  577. +++++++++++++++++++++++++++
  578.  
  579. >From ldo@waikato.ac.nz (Lawrence D9Oliveiro)
  580. Date: Wed, 05 Apr 1995 17:05:52 +1200
  581. Organization: University of Waikato
  582.  
  583. In article <1995Apr3.234342.4430@news.rlcn.rl.af.mil>, winter@ai.rl.af.mil
  584. (Jim Wintermyre) wrote:
  585.  
  586. >Does anyone know of a simple way to determine if a given indexed
  587. >GDevice is in color or grayscale mode?
  588.  
  589.      TestDeviceAttribute(TheDevice, gdDevType)
  590.  
  591. is supposed to return true for colour, false for greyscale.
  592.  
  593. ---------------------------
  594.  
  595. >From rondavis@gateway.datawatch.com (Ron Davis)
  596. Subject: Do games use WaitNextEvent
  597. Date: Fri, 10 Mar 1995 16:35:06 -0400
  598. Organization: Datawatch Corp
  599.  
  600. I am currently playing with the Spriteworld examples and have taken the
  601. Simple Break Out code and added an event loop and menus etc.  The problem
  602. is I call WaitNextEvent in this loop and that drags the program to a
  603. crawl, unless I set the sleep time to 0.  Even at 1 it is too slow.  At 0
  604. I am being very MacRude.
  605.  
  606. So my question is: Do Mac arcade style games call WaitNextEvent?  If not
  607. what do they do?
  608.  
  609. __________________________________________________________________
  610. "I want to know God's thoughts...the rest are details."
  611.                                            -- Albert Einstein
  612. _________________________________________
  613. Ron Davis           Software Engineer       rondavis@datawatch.com 
  614.                     Finger rdavis@server0.cybernetics.net for PGP key.
  615.                http://www.cybernetics.net/users/rdavis/RDHomePage.html
  616. Opinions are MINE - Datawatch doesn't pay me enough to own my opinions.
  617.  
  618. +++++++++++++++++++++++++++
  619.  
  620. >From first.ascent@mindlink.bc.ca (Alex Curylo)
  621. Date: 11 Mar 1995 04:44:33 GMT
  622. Organization: First Ascent
  623.  
  624. In article <3jqrqm$e84@kernighan.cs.umass.edu>
  625. jgrass@cs.umass.edu (Joshua Grass) writes:
  626.  
  627. >  The truth is that WaitNextEvent
  628. > just goes into too much code to be able to implement and have a fast game.
  629.  
  630. Not necessarily true -- if there's an event pending for your
  631. application, WNE returns it quickly enough to keep things moving along
  632. nicely.
  633.  
  634. Therefore, always post a private event to yourself immediately before
  635. calling WNE. (And delete it afterwards, if WNE returned a different
  636. event!) This was quite sufficient to achieve acceptable frame rates
  637. with that fine, fine ZipZapMap! series, for instance.
  638.  
  639. Alex Curylo  first.ascent@mindlink.bc.ca  (604)451-5323, fax -1359
  640. ***  First Ascent: Mac programming, UP paragliders, indie CDs  ***
  641.  
  642. +++++++++++++++++++++++++++
  643.  
  644. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  645. Date: Sat, 11 Mar 1995 18:14:58 +1300 (NZDT)
  646. Organization: (none)
  647.  
  648. rondavis@gateway.datawatch.com (Ron Davis) writes:
  649. > I am currently playing with the Spriteworld examples and have taken the
  650. > Simple Break Out code and added an event loop and menus etc.  The problem
  651. > is I call WaitNextEvent in this loop and that drags the program to a
  652. > crawl, unless I set the sleep time to 0.  Even at 1 it is too slow.  At 0
  653. > I am being very MacRude.
  654. > So my question is: Do Mac arcade style games call WaitNextEvent?  If not
  655. > what do they do?
  656.  
  657. Don't call it every time around the loop.  Check TickCount() and only call
  658. WaitNextEvent if at least 10 or 15 ticks have passed since the last time you
  659. called it.  And use a sleep time of zero.
  660.  
  661. +++++++++++++++++++++++++++
  662.  
  663. >From dwareing@apanix.apana.org.au (David Wareing)
  664. Date: 14 Mar 1995 19:15:45 GMT
  665. Organization: Apanix Public Access Unix, +61 8 373 5485 (5 lines)
  666.  
  667. rondavis@gateway.datawatch.com (Ron Davis) writes:
  668.  
  669. >I am currently playing with the Spriteworld examples and have taken the
  670. >Simple Break Out code and added an event loop and menus etc.  The problem
  671. >is I call WaitNextEvent in this loop and that drags the program to a
  672. >crawl, unless I set the sleep time to 0.  Even at 1 it is too slow.  At 0
  673. >I am being very MacRude.
  674.  
  675. >So my question is: Do Mac arcade style games call WaitNextEvent?  If not
  676. >what do they do?
  677.  
  678. Someone is going to flame me, but don't bother with WNE for an *arcade*
  679. game. Check the mouse and keyboard directly (GetKeys) and keep
  680. things tight within your main loop by not caring less about anything
  681. else that's happening to the system. Such games often need to take
  682. over the whole shebang for performance reasons. If someone wants
  683. to play an arcade game well they're just going to have to finish
  684. that modem transfer first. Life's like that. At least until we
  685. get a new OS.
  686.  
  687. However, if speed is not a major issue (say you're writing a
  688. strategy or board game) then the usual event handling rigmorole
  689. should be used.
  690.  
  691. --
  692. David Wareing                     dwareing@apanix.apana.org.au
  693. Adelaide, South Australia         
  694. Macintosh Games & Multimedia Programming
  695. - ------------------------------------------------------------
  696. May you live in interesting times
  697.  
  698. +++++++++++++++++++++++++++
  699.  
  700. >From fdj@muc.de (Florian -FDj- Dejako)
  701. Date: Wed, 15 Mar 1995 00:10:27 +0100
  702. Organization: None. None at all!
  703.  
  704. In article <3k4q11$59t@tipellium.apana.org.au>,
  705. dwareing@apanix.apana.org.au (David Wareing) wrote:
  706.  
  707. > rondavis@gateway.datawatch.com (Ron Davis) writes:
  708. > >I am currently playing with the Spriteworld examples and have taken the
  709. > >Simple Break Out code and added an event loop and menus etc.  The problem
  710. > >is I call WaitNextEvent in this loop and that drags the program to a
  711. > >crawl, unless I set the sleep time to 0.  Even at 1 it is too slow.  At 0
  712. > >I am being very MacRude.
  713. > >So my question is: Do Mac arcade style games call WaitNextEvent?  If not
  714. > >what do they do?
  715.  
  716. If you want to be Mac-friendly you'll have it two ways:
  717.  
  718. a) The user selects "No background operations" in a menu. Then you don't bother
  719.    about WNE.
  720.  
  721. b) The user wants their Mac to perform some jobs in the background and they
  722.    told you that through that same menu item. You'll want to implement some-
  723.    thing known as "WNE Smarts" then:
  724.  
  725. in your main event loop it looks like: (from scratch)
  726.  
  727. long theBusyTime = GetCaretTime();
  728. long theNextTimeWNE = GetTickCount() + theBusyTime;
  729.  
  730. while (!gDone) {
  731.    PerformAction(); // do your busy tasks here, like display the next frame
  732.    
  733.    if (GetTickCount() > theNextTimeWNE) {
  734.       GetNextEvent(...); // didn't we want to use WaitNextEvent here? however
  735.       DoEvent(theEvent);
  736.       theNextTimeWNE = GetTickCount() + theBusyTime;
  737.    }
  738. }
  739.  
  740. // this way you at least don't miss any important Mac-events... enjoy.
  741.  
  742. - ------------------------------------------------------------------
  743. - - Florian Dejako -- fdj@muc.de -- Macintosh! -- FDj on #macdev ---
  744. - ------------------------------------------------------------------
  745.  
  746. +++++++++++++++++++++++++++
  747.  
  748. >From peter@mail.peter.com.au (Peter N Lewis)
  749. Date: Thu, 16 Mar 1995 13:31:24 +0800
  750. Organization: Curtin University
  751.  
  752. In article <3k4q11$59t@tipellium.apana.org.au>,
  753. dwareing@apanix.apana.org.au (David Wareing) wrote:
  754.  
  755. >Someone is going to flame me, but don't bother with WNE for an *arcade*
  756. >game. Check the mouse and keyboard directly (GetKeys) and keep
  757. >things tight within your main loop by not caring less about anything
  758. >else that's happening to the system. Such games often need to take
  759. >over the whole shebang for performance reasons. If someone wants
  760. >to play an arcade game well they're just going to have to finish
  761. >that modem transfer first. Life's like that. At least until we
  762. >get a new OS.
  763.  
  764. Says who?  I've played marathon with Anarchie downloading in the
  765. background.  It kept the modem flat out at 14k4 speeds with out any change
  766. in Marathon's performance.  All it requires is for people to program
  767. well.  You're right, if people program badly, then the current OS wont
  768. function well.  If you think some future OS will make up for people
  769. programming badly, then I've got some ocean side land in Alice Springs to
  770. sell you...
  771.  
  772. There is no single anser to "Do games use WaitNextEvent?".  It depends on
  773. the game.  If you want an arcade game, then probably the best bet is to
  774. not call WNE except between levels or during Pauses.  Another option is to
  775. call GNE instead of WNE.  Another option is to post and event to yourself
  776. and then call WNE which speeds up the return time.  Another option is to
  777. call WNE only if there is a pending event.  Another option is to call WNE
  778. infrequently (once every 15 or 30 ticks).
  779.  
  780. Now, games aside, here is some specifc advice about WNE:
  781.  
  782. Always use a sleep time of zero if you are actively doing something
  783. (downloading, decoding, creating mandlebrots, whatever).
  784.  
  785. Call WNE as frequently as you can, but not so frequently that it degrades
  786. performance.  Call it more frequently if you are in the background (at
  787. least once a tick or two), and less frquently if you are in the foreground
  788. (up to once ever 5 ticks (more for arcade style use)).  
  789.  
  790. Obviously, if you're idle, then call it as frequently as possible, with a
  791. noticable sleep time (60 ticks or more if you don't get any non-event
  792. action, 5-15 ticks if you can get events from other than the event loop
  793. (eg connection events on a TCP stream or whatever)).
  794.  
  795. Enjoy,
  796.    Peter.
  797. -- 
  798. The best movie I've seen recently is "Heavenly Creatures" from New Zealand
  799.  
  800. +++++++++++++++++++++++++++
  801.  
  802. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  803. Date: Fri, 17 Mar 1995 15:00:47 +1300 (NZDT)
  804. Organization: (none)
  805.  
  806. peter@mail.peter.com.au (Peter N Lewis) writes:
  807. > >Someone is going to flame me, but don't bother with WNE for an *arcade*
  808. > >game. Check the mouse and keyboard directly (GetKeys) and keep
  809. > >things tight within your main loop by not caring less about anything
  810. > >else that's happening to the system. Such games often need to take
  811. > >over the whole shebang for performance reasons. If someone wants
  812. > >to play an arcade game well they're just going to have to finish
  813. > >that modem transfer first. Life's like that. At least until we
  814. > >get a new OS.
  815. > Says who?  I've played marathon with Anarchie downloading in the
  816. > background.  It kept the modem flat out at 14k4 speeds with out any change
  817. > in Marathon's performance.  All it requires is for people to program
  818. > well.
  819.  
  820. I guess we won't mention that the clever programmer of Anarchie wrote it
  821. using chained completion procs (or at least I assume that's what you did)
  822. so as to not *need* other people to call WaitNextEvent... :-)
  823.  
  824. -- Bruce
  825.  
  826. +++++++++++++++++++++++++++
  827.  
  828. >From ingemar@lysator.liu.se (Ingemar Ragnemalm)
  829. Date: 17 Mar 1995 10:10:03 GMT
  830. Organization: (none)
  831.  
  832. rondavis@gateway.datawatch.com (Ron Davis) writes:
  833.  
  834. >So my question is: Do Mac arcade style games call WaitNextEvent?  If not
  835. >what do they do?
  836.  
  837. I usually don't call WNE in my game loops, except if the user demands it
  838. by turning the "allow background tasks" switch on (which I usually provide).
  839. However, when the game is paused, I certainly call WNE.
  840.  
  841. --
  842. - -
  843. Ingemar Ragnemalm, PhD
  844. Image processing, Mac shareware games
  845. E-mail address: ingemar@isy.liu.se or ingemar@lysator.liu.se
  846.  
  847. +++++++++++++++++++++++++++
  848.  
  849. >From peter@mail.peter.com.au (Peter N Lewis)
  850. Date: Thu, 16 Mar 1995 13:31:24 +0800
  851. Organization: Curtin University
  852.  
  853. In article <3k4q11$59t@tipellium.apana.org.au>,
  854. dwareing@apanix.apana.org.au (David Wareing) wrote:
  855.  
  856. >Someone is going to flame me, but don't bother with WNE for an *arcade*
  857. >game. Check the mouse and keyboard directly (GetKeys) and keep
  858. >things tight within your main loop by not caring less about anything
  859. >else that's happening to the system. Such games often need to take
  860. >over the whole shebang for performance reasons. If someone wants
  861. >to play an arcade game well they're just going to have to finish
  862. >that modem transfer first. Life's like that. At least until we
  863. >get a new OS.
  864.  
  865. Says who?  I've played marathon with Anarchie downloading in the
  866. background.  It kept the modem flat out at 14k4 speeds with out any change
  867. in Marathon's performance.  All it requires is for people to program
  868. well.  You're right, if people program badly, then the current OS wont
  869. function well.  If you think some future OS will make up for people
  870. programming badly, then I've got some ocean side land in Alice Springs to
  871. sell you...
  872.  
  873. There is no single anser to "Do games use WaitNextEvent?".  It depends on
  874. the game.  If you want an arcade game, then probably the best bet is to
  875. not call WNE except between levels or during Pauses.  Another option is to
  876. call GNE instead of WNE.  Another option is to post and event to yourself
  877. and then call WNE which speeds up the return time.  Another option is to
  878. call WNE only if there is a pending event.  Another option is to call WNE
  879. infrequently (once every 15 or 30 ticks).
  880.  
  881. Now, games aside, here is some specifc advice about WNE:
  882.  
  883. Always use a sleep time of zero if you are actively doing something
  884. (downloading, decoding, creating mandlebrots, whatever).
  885.  
  886. Call WNE as frequently as you can, but not so frequently that it degrades
  887. performance.  Call it more frequently if you are in the background (at
  888. least once a tick or two), and less frquently if you are in the foreground
  889. (up to once ever 5 ticks (more for arcade style use)).  
  890.  
  891. Obviously, if you're idle, then call it as frequently as possible, with a
  892. noticable sleep time (60 ticks or more if you don't get any non-event
  893. action, 5-15 ticks if you can get events from other than the event loop
  894. (eg connection events on a TCP stream or whatever)).
  895.  
  896. Enjoy,
  897.    Peter.
  898. -- 
  899. The best movie I've seen recently is "Heavenly Creatures" from New Zealand
  900.  
  901. +++++++++++++++++++++++++++
  902.  
  903. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  904. Date: Fri, 17 Mar 1995 15:00:47 +1300 (NZDT)
  905. Organization: (none)
  906.  
  907. peter@mail.peter.com.au (Peter N Lewis) writes:
  908. > >Someone is going to flame me, but don't bother with WNE for an *arcade*
  909. > >game. Check the mouse and keyboard directly (GetKeys) and keep
  910. > >things tight within your main loop by not caring less about anything
  911. > >else that's happening to the system. Such games often need to take
  912. > >over the whole shebang for performance reasons. If someone wants
  913. > >to play an arcade game well they're just going to have to finish
  914. > >that modem transfer first. Life's like that. At least until we
  915. > >get a new OS.
  916. > Says who?  I've played marathon with Anarchie downloading in the
  917. > background.  It kept the modem flat out at 14k4 speeds with out any change
  918. > in Marathon's performance.  All it requires is for people to program
  919. > well.
  920.  
  921. I guess we won't mention that the clever programmer of Anarchie wrote it
  922. using chained completion procs (or at least I assume that's what you did)
  923. so as to not *need* other people to call WaitNextEvent... :-)
  924.  
  925. -- Bruce
  926.  
  927. +++++++++++++++++++++++++++
  928.  
  929. >From ingemar@lysator.liu.se (Ingemar Ragnemalm)
  930. Date: 17 Mar 1995 10:10:03 GMT
  931. Organization: (none)
  932.  
  933. rondavis@gateway.datawatch.com (Ron Davis) writes:
  934.  
  935. >So my question is: Do Mac arcade style games call WaitNextEvent?  If not
  936. >what do they do?
  937.  
  938. I usually don't call WNE in my game loops, except if the user demands it
  939. by turning the "allow background tasks" switch on (which I usually provide).
  940. However, when the game is paused, I certainly call WNE.
  941.  
  942. --
  943. - -
  944. Ingemar Ragnemalm, PhD
  945. Image processing, Mac shareware games
  946. E-mail address: ingemar@isy.liu.se or ingemar@lysator.liu.se
  947.  
  948. +++++++++++++++++++++++++++
  949.  
  950. >From cconstan@airux1.env.gov.bc.ca (Carl B. Constantine)
  951. Date: Fri, 17 Mar 1995 07:52:49 -0700
  952. Organization: Ministry of Environment, Lands & Parks
  953.  
  954. In article <peter-1603951331240001@rocky.curtin.edu.au>,
  955. peter@mail.peter.com.au (Peter N Lewis) wrote:
  956.  
  957. > Now, games aside, here is some specifc advice about WNE:
  958. > Always use a sleep time of zero if you are actively doing something
  959. > (downloading, decoding, creating mandlebrots, whatever).
  960. > Call WNE as frequently as you can, but not so frequently that it degrades
  961. > performance.  Call it more frequently if you are in the background (at
  962. > least once a tick or two), and less frquently if you are in the foreground
  963. > (up to once ever 5 ticks (more for arcade style use)).  
  964. > Obviously, if you're idle, then call it as frequently as possible, with a
  965. > noticable sleep time (60 ticks or more if you don't get any non-event
  966. > action, 5-15 ticks if you can get events from other than the event loop
  967. > (eg connection events on a TCP stream or whatever)).
  968.  
  969. Ok, I'll bite.  How do you know when to call it in these situations (ie: 5
  970. or 15 or 60 ticks, etc).  Generally speaking a program is set up such that
  971. it calls WNE in the main loop, processes it and comes back and calls it
  972. again.  How do you know how many ticks have gone by the next time WNE is
  973. called?
  974.  
  975. -- 
  976. ========================================================================
  977. Carl B. Constantine                  B.C. Environment, Lands & Parks
  978. Systems Officer                      CCONSTAN@airux1.env.gov.bc.ca
  979. "Remember, no matter where you go - there you are" - Buckaroo Bonzai
  980.  
  981. +++++++++++++++++++++++++++
  982.  
  983. >From msmwhq01.rharve01@eds.com (Richard Harvey)
  984. Date: 20 Mar 1995 16:10:53 GMT
  985. Organization: EDS Corporate Info. Systems
  986.  
  987. In article <cconstan-1703950752490001@epdso1.env.gov.bc.ca>
  988. cconstan@airux1.env.gov.bc.ca (Carl B. Constantine) writes:
  989.  
  990. > Ok, I'll bite.  How do you know when to call it in these situations (ie: 5
  991. > or 15 or 60 ticks, etc).  Generally speaking a program is set up such that
  992. > it calls WNE in the main loop, processes it and comes back and calls it
  993. > again.  How do you know how many ticks have gone by the next time WNE is
  994. > called?
  995.  
  996. Well, I'd recommend setting up a Time Manager task that is called at
  997. whatever interval you need to call WNE at.  You can then have it set a
  998. global Boolean that you can check in your main loop to see if it is
  999. time to call WNE.  If it is, set it back to false and wait for the next
  1000. pass.
  1001.  
  1002. -- Rich
  1003.  
  1004. **********************************************************************
  1005. **  Richard Harvey                        "We are the music makers; **
  1006. **  ASE - Electronic Data Systems (EDS)     We are the dreamers of  **
  1007. **  Corporate Information Systems             the dream..."         **
  1008. **                                                -- Willy Wonka    **
  1009. **                                                                  **
  1010. **  msmwhq01.rharve01@eds.com                                       **
  1011. **********************************************************************
  1012.  
  1013. +++++++++++++++++++++++++++
  1014.  
  1015. >From phixus@deltanet.com (Chris De Salvo)
  1016. Date: Mon, 20 Mar 1995 21:55:17 -0800
  1017. Organization: MacPlay
  1018.  
  1019. In article <3kk9ed$l34@maverick.tad.eds.com>, msmwhq01.rharve01@eds.com
  1020. (Richard Harvey) wrote:
  1021.  
  1022. > In article <cconstan-1703950752490001@epdso1.env.gov.bc.ca>
  1023. > cconstan@airux1.env.gov.bc.ca (Carl B. Constantine) writes:
  1024. > > Ok, I'll bite.  How do you know when to call it in these situations (ie: 5
  1025. > > or 15 or 60 ticks, etc).  Generally speaking a program is set up such that
  1026. > > it calls WNE in the main loop, processes it and comes back and calls it
  1027. > > again.  How do you know how many ticks have gone by the next time WNE is
  1028. > > called?
  1029. > Well, I'd recommend setting up a Time Manager task that is called at
  1030. > whatever interval you need to call WNE at.  You can then have it set a
  1031. > global Boolean that you can check in your main loop to see if it is
  1032. > time to call WNE.  If it is, set it back to false and wait for the next
  1033. > pass.
  1034.  
  1035. Depends on the game.  If you're writing a bridge game, or checkers, by all
  1036. means, use a normal event loop.  If you're writing a
  1037. massively-speed-critical arcade thriller then screw the event loop.  Take
  1038. over the whole machine.  Read the mouse directly, read the keyboard
  1039. directly, ignore all other applications.  you're a game, you're allowed.
  1040.  
  1041. If you do use an event loop then Apple recommends check the double-click
  1042. time with GetDoubleTime and calling WNE at least that often.  One thing
  1043. that a lot of people do is to use GetOSEvent the majority of the time for
  1044. speed's sake and then call WNE about every 60th of a second for
  1045. friendliness' sake.  GetOSEvent will let you have a crack at keyboard and
  1046. mouse events before the rest of the system.  Save a lot of time.
  1047.  
  1048. This is also a common thing to do in PowerPC games since WNE is still
  1049. emulated.  By lowering the number of WNE calls you remove a ton of context
  1050. switches and still keep a pretty peppy user-responsiveness.
  1051.  
  1052. L8R
  1053. Chris
  1054.  
  1055. -- 
  1056. +-----------------------------------------------------------------+
  1057. | phixus@deltanet.com         |   Macintosh:  Changing the world, |
  1058. | Chris De Salvo              |        one person at a time!      |
  1059. | Professional Mac Geek       |    -----------------------------  |
  1060. | for MacPlay, Inc.           |      (I wish they'd hurry up!)    |
  1061. +-----------------------------------------------------------------+
  1062.  
  1063. Any opinions expressed, or implied, are my own!  They should not be
  1064. considered representative of the opinions or policies of my employer,
  1065. MacPlay, a division of Interplay Productions, Inc.
  1066.  
  1067. +++++++++++++++++++++++++++
  1068.  
  1069. >From peter@mail.peter.com.au (Peter N Lewis)
  1070. Date: Thu, 23 Mar 1995 16:37:31 +0800
  1071. Organization: Curtin University
  1072.  
  1073. In article <cconstan-1703950752490001@epdso1.env.gov.bc.ca>,
  1074. cconstan@airux1.env.gov.bc.ca (Carl B. Constantine) wrote:
  1075.  
  1076. >Ok, I'll bite.  How do you know when to call it in these situations (ie: 5
  1077. >or 15 or 60 ticks, etc).  Generally speaking a program is set up such that
  1078. >it calls WNE in the main loop, processes it and comes back and calls it
  1079. >again.  How do you know how many ticks have gone by the next time WNE is
  1080. >called?
  1081.  
  1082. I'm not sure exactly what your question is.  But I'll try again :-)
  1083.  
  1084. The sleep time in the WNE call is basically how long your application is
  1085. willing to wait until it WNE returns unless an event is in the OS queue
  1086. (or the mouse moves outside the specified region).   Thus the sleep time
  1087. you use depends on what you are waiting for.  If you application has
  1088. nothing to do and is waiting solely for user input, then you can call WNE
  1089. with a large sleep time.  If all your app has to do is track the cursor
  1090. (to set the IBeam/Arrow for example), then you use a large sleep time and
  1091. a mouse region.  If you are waiting on other events that wont come thru
  1092. the WNE event queue (such as polled asyncronous commands, TCP/ADSP etc
  1093. connections), then you need to have a sufficiently low sleep time that you
  1094. can respond quickly to those events.  If you are actively processing (eg
  1095. calculating mandlebrots or whatever), then you should always have a sleep
  1096. time of 0.  In this last case, you should control how much time you take
  1097. up by doing less work between calls to WNE when you are in teh backgroun,
  1098. and more work when you are the foreground app.  For example, you might
  1099. calculate one line in your madlebrot set if you are in the background, and
  1100. 10 if you are in the foreground, eg:
  1101.  
  1102. while not quitNow do begin
  1103.   WNE
  1104.   ProcessEvents
  1105.   if inforground then
  1106.     CalculateLines(10)
  1107.   else
  1108.     CalculateLines(1)
  1109.   end-if
  1110. end-while
  1111.  
  1112. Or better yet, you might calculate for 1 tick if you are in the
  1113. background, and 5 ticks in the foreground.
  1114.  
  1115. So basically, you have a sleep time of 0 if you are actively doing some
  1116. processing.  And a sleep time of 5-15 if you are idle, but have to respond
  1117. to events that don't come thru the event loop, and a sleep time of 120 if
  1118. you respond only to user events.
  1119.  
  1120. Enjoy,
  1121.    Peter.
  1122. -- 
  1123. The best movie I've seen recently is "Heavenly Creatures" from New Zealand
  1124.  
  1125. +++++++++++++++++++++++++++
  1126.  
  1127. >From grobbins@znet.com (Grobbins)
  1128. Date: Sun, 19 Mar 1995 13:20:25 -0700
  1129. Organization: zNET
  1130.  
  1131. In article <cconstan-1703950752490001@epdso1.env.gov.bc.ca>,
  1132. cconstan@airux1.env.gov.bc.ca (Carl B. Constantine) wrote:
  1133. >How do you know how many ticks have gone by the next time WNE is called?
  1134.  
  1135. Call TickCount to see if a sufficient interval since the last call to WNE
  1136. has elapsed. If your app is in the foreground and is busy doing work or
  1137. animating, an interval of five or ten ticks between calls to WNE is
  1138. reasonable.  If an app is in the background or is not really busy, do not
  1139. impose any interval between WNE calls, and use the largest sleep time
  1140. necessary to give the app adequate null events (typically GetCaretTime()
  1141. for apps flashing a cursor and a large number, like 5000, for apps not
  1142. doing anything other than waiting for user or high-level events.)
  1143.  
  1144.  
  1145. Grobbins                           grobbins@znet.com
  1146.  
  1147. +++++++++++++++++++++++++++
  1148.  
  1149. >From ericd@netcom.com (Eric Drumbor)
  1150. Date: Wed, 29 Mar 1995 14:02:00 GMT
  1151. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  1152.  
  1153. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  1154.  
  1155. Chris De Salvo (phixus@deltanet.com) wrote:
  1156. : In article <3kk9ed$l34@maverick.tad.eds.com>, msmwhq01.rharve01@eds.com
  1157. : (Richard Harvey) wrote:
  1158.  
  1159. : > In article <cconstan-1703950752490001@epdso1.env.gov.bc.ca>
  1160. : > cconstan@airux1.env.gov.bc.ca (Carl B. Constantine) writes:
  1161. : > 
  1162. : > > Ok, I'll bite.  How do you know when to call it in these situations (ie: 5
  1163. : > > or 15 or 60 ticks, etc).  Generally speaking a program is set up such that
  1164. : > > it calls WNE in the main loop, processes it and comes back and calls it
  1165. : > > again.  How do you know how many ticks have gone by the next time WNE is
  1166. : > > called?
  1167. : > 
  1168. : > Well, I'd recommend setting up a Time Manager task that is called at
  1169. : > whatever interval you need to call WNE at.  You can then have it set a
  1170. : > global Boolean that you can check in your main loop to see if it is
  1171. : > time to call WNE.  If it is, set it back to false and wait for the next
  1172. : > pass.
  1173.  
  1174. : Depends on the game.  If you're writing a bridge game, or checkers, by all
  1175. : means, use a normal event loop.  If you're writing a
  1176. : massively-speed-critical arcade thriller then screw the event loop.  Take
  1177. : over the whole machine.  Read the mouse directly, read the keyboard
  1178. : directly, ignore all other applications.  you're a game, you're allowed.
  1179.  
  1180. : If you do use an event loop then Apple recommends check the double-click
  1181. : time with GetDoubleTime and calling WNE at least that often.  One thing
  1182. : that a lot of people do is to use GetOSEvent the majority of the time for
  1183. : speed's sake and then call WNE about every 60th of a second for
  1184. : friendliness' sake.  GetOSEvent will let you have a crack at keyboard and
  1185. : mouse events before the rest of the system.  Save a lot of time.
  1186.  
  1187.  
  1188.      What about network play?  I'm just starting to read up on using 
  1189. AppleTalk (to use with my next game), but I'm just wondering how these 
  1190. practices would effect a network session?  Would WNE need to be called 
  1191. more often because of this, or would this kind of loop (calling GetOSEvt 
  1192. and calling WNE once every 60 ticks) work peachy with net games?  Also, 
  1193. how about serial connections?
  1194.  
  1195.  
  1196.  
  1197.  
  1198. -- 
  1199. "Joseph Stalin, take hold of my armored mumu and we shall leave this place."
  1200. Eric A. Drumbor
  1201. BW Software                                             
  1202. ericd@netcom.com
  1203. formerly Malicious_Monarch@nile.com
  1204.  
  1205. +++++++++++++++++++++++++++
  1206.  
  1207. >From tyger@halcyon.com (Chris Todd)
  1208. Date: Thu, 30 Mar 1995 19:05:10 -0800
  1209. Organization: Tyger Soft
  1210.  
  1211. In article <ericdD67GBC.7Kv@netcom.com>, ericd@netcom.com (Eric Drumbor) wrote:
  1212.  
  1213. ->      What about network play?  I'm just starting to read up on using 
  1214. -> AppleTalk (to use with my next game), but I'm just wondering how these 
  1215. -> practices would effect a network session?  Would WNE need to be called 
  1216. -> more often because of this, or would this kind of loop (calling GetOSEvt 
  1217. -> and calling WNE once every 60 ticks) work peachy with net games?  Also, 
  1218. -> how about serial connections?
  1219.  
  1220.    Keep reading up... most of the apple talk stuff (depending on the
  1221. protocol) can be done Async, so you get to decide when you wany to look at
  1222. what gets sent to you, and theEvent stuff isn't even a concern :-)...
  1223.  
  1224. -- 
  1225. Chris Todd
  1226. tyger@halcyon.com
  1227.  
  1228. +++++++++++++++++++++++++++
  1229.  
  1230. >From sandvik@apple.com (Kent Sandvik)
  1231. Date: Sun, 02 Apr 1995 17:54:58 -0800
  1232. Organization: Apple Computer, Inc. Developer Technical Support
  1233.  
  1234. > In article <ericdD67GBC.7Kv@netcom.com>, ericd@netcom.com (Eric Drumbor)
  1235. wrote:
  1236. > ->      What about network play?  I'm just starting to read up on using 
  1237. > -> AppleTalk (to use with my next game), but I'm just wondering how these 
  1238. > -> practices would effect a network session?  Would WNE need to be called 
  1239. > -> more often because of this, or would this kind of loop (calling GetOSEvt 
  1240. > -> and calling WNE once every 60 ticks) work peachy with net games?  Also, 
  1241. > -> how about serial connections?
  1242.  
  1243. Call WNE (or EventAvail) once a minute, and the network connections should
  1244. still be alive.
  1245.  
  1246. --Kent
  1247.  
  1248. -- 
  1249. Kent Sandvik   sandvik@apple.com                  Working with Multimedia stuff...
  1250. Apple Developer Technical Support.                                     Private activities on Internet.
  1251.  
  1252. ---------------------------
  1253.  
  1254. >From english@primenet.com (Lawson English)
  1255. Subject: FYI QuickTime 2.0 Dev Guide for Macintosh on Internet (ftp)
  1256. Date: 7 Apr 1995 22:34:29 GMT
  1257. Organization: Primenet
  1258.  
  1259. Date: Wed, 5 Apr 1995 14:13:51 -0700
  1260. From: Kent Sandvik <sandvik@apple.com>
  1261. To: Multiple recipients of list <quicktime-dev@abs.apple.com>
  1262. Subject: FYI QuickTime 2.0 Dev Guide for Macintosh on Internet (ftp)
  1263.  
  1264. [Feel free to forward this info to whoever needs it, even better, ask them
  1265. to subscribe to this mailing list in order to get latest developer
  1266. information concerning QuickTime].
  1267.  
  1268. The QuickTime 2.0 Developer Guide for Macintosh is now available on ftp:
  1269.  
  1270. URL:
  1271. ftp://ftp.info.apple.com/dts/quicktime/QT_MAC.PDF.hqx
  1272.  
  1273. This document has information about the new music architecture of QT 2.0,
  1274. data handlers, additional APIs in the movie toolbox and in general what's
  1275. new in QT 2.0. This is an Acrobat file (stuffit/binhex, 812k), so you need
  1276. the latest Acrobat reader as well.
  1277.  
  1278. There's a small chance this document might move to another location, if so
  1279. I will inform. Meanwhile, this would help those who subscribe to the OS SDK
  1280. CDs, and didn't receive this info on the #2 CD (and should be available on
  1281. #3), or anyone else who wants to do programming using the new QT 2.0
  1282. features.
  1283.  
  1284. --Kent
  1285.  
  1286. - -
  1287. Kent Sandvik    sandvik@apple.com              DTS Engineer, Apple.
  1288.  
  1289. --
  1290. - -----------------------------------------------------------------------------
  1291. Lawson English                            __  __     ____  ___       ___ ____
  1292. english@primenet.com                     /__)/__) / / / / /_  /\  / /_    /
  1293.                                         /   / \  / / / / /__ /  \/ /___  /
  1294. - -----------------------------------------------------------------------------
  1295.  
  1296. ---------------------------
  1297.  
  1298. >From Said Kobeissi <said.kobeissi@together.org>
  1299. Subject: File manipulation??
  1300. Date: 6 Apr 1995 15:25:46 GMT
  1301. Organization: TOGETHER INTERNET SERVICES
  1302.  
  1303. Hi everyone,
  1304.  
  1305.   I am just learning some macintosh file stuff, and have run across a 
  1306. problem.  I am writing a preferences file for my application, and am 
  1307. lost trying to find out what routines to use.  Currently, I use 
  1308. FindFolder to find the Preferences folder ID. I then try to use FSOpen 
  1309. with my filename, the returned directory ID, and a pointer for the 
  1310. returned file reference number.  However, FSOpen seems to want a 
  1311. directory reference number rather than a directory ID. How do I convert 
  1312. a directory Id to a directory reference number? Or am I going about this 
  1313. completely the wrong way? I understand I could put the path in FSOpen, 
  1314. but since it might vary from computer to computer, I want to make it 
  1315. flexible enough to work on any machine. I guess its a really simple 
  1316. question, does anyone have a code snippet that opens a preference file
  1317. given only the filename (and knowledge that the file is in the 
  1318. preferences folder), and reads a string/whatever from it. Thanks for 
  1319. reading this long tedious letter, and thanks for giving me any help you 
  1320. can. =)
  1321.  
  1322. Said
  1323.  
  1324. tai@together.net
  1325. http://together.net/~tai/
  1326.  
  1327.  
  1328.  
  1329. +++++++++++++++++++++++++++
  1330.  
  1331. >From Anders.Wahlin@hum.gu.se (Anders Wahlin)
  1332. Date: Fri, 7 Apr 1995 12:41:26 GMT
  1333. Organization: Hum Fak:s Dataservice
  1334.  
  1335. In article <3m115q$24v@bristlecone.together.net>, Said Kobeissi
  1336. <said.kobeissi@together.org> wrote:
  1337.  
  1338. > Hi everyone,
  1339. >   I am just learning some macintosh file stuff, and have run across a 
  1340. > problem.  I am writing a preferences file for my application, and am 
  1341. > lost trying to find out what routines to use.  Currently, I use 
  1342. > FindFolder to find the Preferences folder ID. I then try to use FSOpen 
  1343. > with my filename, the returned directory ID, and a pointer for the 
  1344. > returned file reference number.  However, FSOpen seems to want a 
  1345. > directory reference number rather than a directory ID. How do I convert 
  1346. > a directory Id to a directory reference number? Or am I going about this 
  1347. > completely the wrong way? I understand I could put the path in FSOpen, 
  1348. > but since it might vary from computer to computer, I want to make it 
  1349. > flexible enough to work on any machine. I guess its a really simple 
  1350. > question, does anyone have a code snippet that opens a preference file
  1351. > given only the filename (and knowledge that the file is in the 
  1352. > preferences folder), and reads a string/whatever from it. Thanks for 
  1353. > reading this long tedious letter, and thanks for giving me any help you 
  1354. > can. =)
  1355.  
  1356. Make a FSSpec of the preference file. Then make use of the FSpxxxx
  1357. functions. Like this:
  1358.  
  1359. void HandleMyPrefFile(void) {
  1360.       OSErr theErr;
  1361.       short fileRefNum;
  1362.  
  1363.    theErr = OpenMyPrefFile("\pName of pref file", &fileRefNum);
  1364.    if (theErr != noErr){
  1365.       /* Handle the error */
  1366.    }
  1367.    ...
  1368. ...
  1369. ...
  1370. ...
  1371. }
  1372.  
  1373. OSErr OpenMyPrefFile(Str255 prefFileName, short *prefFRefNum) {
  1374.       OSErr theErr;
  1375.       FSSpec theSpec;
  1376.       short fRefNum;
  1377.  
  1378.    theErr = GetPrefFileSpec(prefFileName, &theSpec);
  1379.    if (theErr != noErr) return (theErr);
  1380.  
  1381.    /* If your preferences is stored in a data file:
  1382.  
  1383.       theErr = FSpOpenDF(&theSpec, fsRdWrPerm, &fRefNum);
  1384.       if (theErr != noErr) return (theErr);
  1385.       *prefFrefNum = fRefNum;
  1386.    */
  1387.  
  1388.    /* If your preferences is stored in a resource file:
  1389.    
  1390.       fRefNum = FSpOpenResFile(&theSpec, fsRdWrPerm);
  1391.       if (ResError() != noErr) return (ResError());
  1392.       *prefFrefNum = fRefNum;
  1393.    */
  1394.  
  1395. }
  1396.  
  1397. OSErr GetPrefFileSpec(Str255 fileName, FSSpec *theSpec) {
  1398.       OSErr theErr;
  1399.       short foundVRefNum;
  1400.       long foundDirID;
  1401.       FSSpec tempSpec;
  1402.  
  1403.    theErr = FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder,
  1404. &foundVRefNum, &foundDirID);
  1405.    if (theErr != noErr) return (theErr);
  1406.  
  1407.    theErr = FSMakeFSSpec(foundVRefNum, foundDirID, fileName, &tempSpec);
  1408.    if (theErr == -43) {
  1409.       /* The file is not found. Maby you want to create a new one? */
  1410.    }
  1411.    else if (theErr != noErr) return (theErr);
  1412.  
  1413.    *theSpec = tempSpec;
  1414.    return (noErr);
  1415. }
  1416.  
  1417.  
  1418. I hope that this will give you a clue. Good Luck.
  1419.  
  1420. -- 
  1421. Anders Wahlin
  1422. Anders.Wahlin@hum.gu.se
  1423.  
  1424. +++++++++++++++++++++++++++
  1425.  
  1426. >From skevill@tartarus.uwa.edu.au (Scott Kevill)
  1427. Date: 7 Apr 1995 15:38:04 GMT
  1428. Organization: The University of Western Australia
  1429.  
  1430. Said Kobeissi (said.kobeissi@together.org) wrote:
  1431. : Hi everyone,
  1432.  
  1433. :   I am just learning some macintosh file stuff, and have run across a 
  1434. : problem.  I am writing a preferences file for my application, and am 
  1435. : lost trying to find out what routines to use.  Currently, I use 
  1436. : FindFolder to find the Preferences folder ID. I then try to use FSOpen 
  1437. : with my filename, the returned directory ID, and a pointer for the 
  1438. : returned file reference number.  However, FSOpen seems to want a 
  1439. : directory reference number rather than a directory ID. How do I convert 
  1440. : a directory Id to a directory reference number? Or am I going about this 
  1441. : completely the wrong way? I understand I could put the path in FSOpen, 
  1442. : but since it might vary from computer to computer, I want to make it 
  1443. : flexible enough to work on any machine. I guess its a really simple 
  1444. : question, does anyone have a code snippet that opens a preference file
  1445. : given only the filename (and knowledge that the file is in the 
  1446. : preferences folder), and reads a string/whatever from it. Thanks for 
  1447. : reading this long tedious letter, and thanks for giving me any help you 
  1448. : can. =)
  1449.  
  1450. : Said
  1451.  
  1452. : tai@together.net
  1453. : http://together.net/~tai/
  1454.  
  1455. Don't use FSOpen. Rather, use HOpen or HOpenDF. These calls both take a 
  1456. filename, a directory ID, and a volume reference number. The filename you 
  1457. already have, and the other parameters you get from FindFolder. Although 
  1458. these two calls were introduced with System 7, the glue code in the 
  1459. compiler will do the job on earlier systems, just like it does for 
  1460. FindFolder.
  1461.  
  1462. Personally, I wouldn't use the data fork for preferences, I would save 
  1463. them as resources in the file (and use HOpenResFile). That makes it easier 
  1464. for the application to manage them and easier for the user to edit them by 
  1465. hand if they want to (and if templates are provided).
  1466.  
  1467. Hope this helps.
  1468.  
  1469. Scott Kevill
  1470.  
  1471. skevill@tartarus.uwa.edu.au
  1472.  
  1473. ---------------------------
  1474.  
  1475. >From chad@xmission.com (Chad Leigh)
  1476. Subject: Macintosh Drag and Drop
  1477. Date: Tue, 04 Apr 1995 16:37:05 -0600
  1478. Organization: Pengar Enterprises / Amazing Master Autofax
  1479.  
  1480.  
  1481. Hi
  1482.  
  1483. Is there any "documentation" for this?  I have the headers, the
  1484. extensions, etc.  But where is the documentation on how to use this --
  1485. what calls do what, etc.  I don't want to decipher .h files.  I looked
  1486. around the apple WWW stuff and didn't find anything.
  1487.  
  1488. Thanks
  1489. Chad
  1490.  
  1491. - ------------------ Live Free or Die ! ---------------------------
  1492. Chad Leigh              |  When Guns are Outlawed, Criminals Win!
  1493. chad@xmission.com       |  Vote Libertarian!  1-800-682-1776
  1494. Ask about Amazing Master Autofax -- automated fax on demand services
  1495. for your business! (also custom telephony-voice/fax hw/sw solutions)
  1496. Also Quality ROBOTECH PCs at discount -- Bicom Voice Boards
  1497. --Thanks to the Df8 Supporters!----- Don't Tread on Me! -------------
  1498.  
  1499. +++++++++++++++++++++++++++
  1500.  
  1501. >From blm@chinook.halcyon.com (Brian L. Matthews)
  1502. Date: 5 Apr 1995 00:43:29 GMT
  1503. Organization: NW NEXUS, Inc. -- Internet Made Easy (206) 455-3505
  1504.  
  1505. In article <chad-0404951637050001@slc58.xmission.com>,
  1506. Chad Leigh <chad@xmission.com> wrote:
  1507. |Is there any "documentation" for this?
  1508.  
  1509. The manuals should have been included in the same place you got the
  1510. headers, but if they weren't, grab:
  1511.  
  1512. http://ftp.support.apple.com/pub/Apple SW Updates/US/Macintosh/System Software/Other System Software/Mac Drag and Drop (1.1).hqx
  1513. http://ftp.support.apple.com/pub/Apple SW Updates/US/Macintosh/System Software/Other System Software/Mac Drag and Drop (1.1).txt
  1514.  
  1515. Included in the package are documentation, a sample app with source code,
  1516. a couple of apps useful during testing, headers, and extensions.
  1517.  
  1518. Brian
  1519.  
  1520. +++++++++++++++++++++++++++
  1521.  
  1522. >From kevin@vailbox.washington.dc.us (Kevin Michael Vail)
  1523. Date: Tue, 04 Apr 1995 21:31:38 -0500
  1524. Organization: Vailhalla
  1525.  
  1526. In article <chad-0404951637050001@slc58.xmission.com>, chad@xmission.com
  1527. (Chad Leigh) wrote:
  1528.  
  1529. >Hi
  1530. >
  1531. >Is there any "documentation" for this?  I have the headers, the
  1532. >extensions, etc.  But where is the documentation on how to use this --
  1533. >what calls do what, etc.  I don't want to decipher .h files.  I looked
  1534. >around the apple WWW stuff and didn't find anything.
  1535.  
  1536. If you have the headers and the extensions, you should have the
  1537. documentation, too--it was all part of the same package.  Documentation is
  1538. DocViewer files, I believe.  If you got the headers, extensions, etc some
  1539. other way, then you need to get the whole developer's package from one of
  1540. the Apple sites.
  1541. -- 
  1542. Kevin Michael Vail              |  As a general rule, don't solve puzzles
  1543. kevin@vailbox.washington.dc.us  |  that open portals to Hell.
  1544.                                 |   -- A Horror Movie Character's Survival Guide
  1545.  
  1546. +++++++++++++++++++++++++++
  1547.  
  1548. >From chad@xmission.com (Chad Leigh)
  1549. Date: Wed, 05 Apr 1995 01:02:15 -0600
  1550. Organization: Pengar Enterprises / Amazing Master Autofax
  1551.  
  1552. In article <kevin-0404952131380001@vailbox.dgsys.com>,
  1553. kevin@vailbox.washington.dc.us (Kevin Michael Vail) wrote:
  1554.  
  1555. > In article <chad-0404951637050001@slc58.xmission.com>, chad@xmission.com
  1556. > (Chad Leigh) wrote:
  1557. > >Hi
  1558. > >
  1559. > >Is there any "documentation" for this?  I have the headers, the
  1560. > >extensions, etc.  But where is the documentation on how to use this --
  1561. > >what calls do what, etc.  I don't want to decipher .h files.  I looked
  1562. > >around the apple WWW stuff and didn't find anything.
  1563. > If you have the headers and the extensions, you should have the
  1564. > documentation, too--it was all part of the same package.  Documentation is
  1565. > DocViewer files, I believe.  If you got the headers, extensions, etc some
  1566. > other way, then you need to get the whole developer's package from one of
  1567. > the Apple sites.
  1568. > -- 
  1569.  
  1570.  
  1571. It was on the CW5 disk but just the examples and stuff.  I found them
  1572. however on  the Develop 16 CD.  But thanks!  I had looked all over until I
  1573. looked on old Develop CDs.
  1574.  
  1575. Best regards
  1576. Chad
  1577.  
  1578. - ------------------ Live Free or Die ! ---------------------------
  1579. Chad Leigh              |  When Guns are Outlawed, Criminals Win!
  1580. chad@xmission.com       |  Vote Libertarian!  1-800-682-1776
  1581. Ask about Amazing Master Autofax -- automated fax on demand services
  1582. for your business! (also custom telephony-voice/fax hw/sw solutions)
  1583. Also Quality ROBOTECH PCs at discount -- Bicom Voice Boards
  1584. --Thanks to the Df8 Supporters!----- Don't Tread on Me! -------------
  1585.  
  1586. +++++++++++++++++++++++++++
  1587.  
  1588. >From jumplong@aol.com (Jump Long)
  1589. Date: 7 Apr 1995 03:20:36 -0400
  1590. Organization: America Online, Inc. (1-800-827-6364)
  1591.  
  1592. >Is there any "documentation" for this?  I have the headers, the
  1593. >extensions, etc.  But where is the documentation on how to use this --
  1594. >what calls do what, etc.  I don't want to decipher .h files.  I looked
  1595. >around the apple WWW stuff and didn't find anything.
  1596.  
  1597. The Macintosh Drag and Drop SDK is on the Mac OS SDK CD along with just
  1598. about everything else that used to be a separate SDK from APDA.
  1599.  
  1600. - Jim Luther
  1601.  
  1602. ---------------------------
  1603.  
  1604. >From lankton@spot.Colorado.EDU (LANKTON MARK)
  1605. Subject: No DriverInstall() ???
  1606. Date: 21 Mar 95 14:49:16 GMT
  1607. Organization: University of Colorado at Boulder
  1608.  
  1609.  
  1610. Now that the Universal Headers seem to include *neither* DriverInstall()
  1611. nor _DrvrInstall, just how is one supposed to install a custom driver,
  1612. anyway? I am trying to use a driver written in 68K in a PPC program,
  1613. which should (as I understand it) be an OK thing to do. I am familiar
  1614. with the traditional way of installing a driver on a 68K Mac, but how
  1615. are you supposed to do it if the xInstall() call is not available?
  1616.  
  1617. Puzzled and grumbling,
  1618.  
  1619. Mark Lankton (lankton@spot.colorado.edu)
  1620. Laboratory for Atmospheric and Space Physics
  1621. University of Colorado
  1622.  
  1623. +++++++++++++++++++++++++++
  1624.  
  1625. >From oster@netcom.com (David Phillip Oster)
  1626. Date: Sat, 25 Mar 1995 22:19:25 GMT
  1627. Organization: Netcom Online Communications Services (408-241-9760 login: guest)
  1628.  
  1629. In article <lankton.795797356@spot.Colorado.EDU> lankton@spot.Colorado.EDU (LANKTON MARK) writes:
  1630. >
  1631. >Now that the Universal Headers seem to include *neither* DriverInstall()
  1632. >nor _DrvrInstall, just how is one supposed to install a custom driver,
  1633. >anyway? 
  1634.  
  1635. Think Reference says:
  1636. pascal OSErr DrvrInstall(Handle dHandle, short refNum) = 
  1637.         { 0x301F, 0x205F, 0x2050, 0xA03D, 0x3E80 }
  1638. i.e., this is a pascal protocol, stack based trap, which pushes
  1639. a handle, then a short. The trap number is 0xA03D. the 0x3E80
  1640. moves the return value from the stack to D0 (?)
  1641.  
  1642. This gives you enough info to GetTrapAddress(0xA03D) to get 
  1643. a UPP, then call it with CallUniversalProc().
  1644.  
  1645.  
  1646. -- 
  1647. - ------- <mail-to:oster@netcom.com> ----------
  1648. Ahh! The thorazine is wearing off and the odinazine is coming on...
  1649.  
  1650. +++++++++++++++++++++++++++
  1651.  
  1652. >From jumplong@aol.com (Jump Long)
  1653. Date: 3 Apr 1995 02:07:59 -0400
  1654. Organization: America Online, Inc. (1-800-827-6364)
  1655.  
  1656. >Now that the Universal Headers seem to include *neither* DriverInstall()
  1657. >nor _DrvrInstall, just how is one supposed to install a custom driver,
  1658. >anyway? I am trying to use a driver written in 68K in a PPC program,
  1659. >which should (as I understand it) be an OK thing to do. I am familiar
  1660. >with the traditional way of installing a driver on a 68K Mac, but how
  1661. >are you supposed to do it if the xInstall() call is not available?
  1662.  
  1663. Mark, you don't really want to use DriverInstall anyway. It has always had
  1664. a bug and as far as I know, the bug has never been fixed (one field in the
  1665. drive queue element isn't filled in).
  1666.  
  1667. What you should use is the DriverInstall function in the DTS RAMDisk
  1668. sample. It does the same thing as the system version of the call, but
  1669. fixes the bug.
  1670.  
  1671. We're in the process of changing the RAMDisk driver to be a pointer-based
  1672. driver instead of a handle-based driver. You should make your drivers
  1673. pointer-based, too -- it will increase the drivers performance and will
  1674. get rid of the Device Manager's nasty calls to the Memory Manager that set
  1675. MemErr.
  1676.  
  1677. - Jim Luther
  1678.  
  1679. ---------------------------
  1680.  
  1681. >From Said Kobeissi <said.kobeissi@together.org>
  1682. Subject: Saving check boxes?
  1683. Date: 4 Apr 1995 15:14:42 GMT
  1684. Organization: TOGETHER INTERNET SERVICES
  1685.  
  1686. Hi everyone,
  1687.  
  1688.   Got a question about saving check boxes. I have a dialog box that has 
  1689. some check boxes. I want to save the settings between runs of the 
  1690. application.  How does one write which boxes are set to the resource 
  1691. file? I want to save them if the user presses done, and not save if the 
  1692. user presses cancel. So I assume there is something I have to do in the 
  1693. 'donebutton' case, but I can't figure out what.  I have tried  the 
  1694. following, but seem to be missing something:
  1695.  
  1696.     ChangedResource(prefDlg);
  1697.     if(!CheckOS(ResError()))
  1698.        return FALSE;
  1699.     UpdateResFile(CurResFile());
  1700.     if(!CheckOS(ResError()))
  1701.        return FALSE;
  1702.     done = TRUE;
  1703.  
  1704.  
  1705. I click on done, and then when I choose that dialog box again, it still 
  1706. doesn't have any boxes checked :( Can anyone help me? Thanks tons! =P
  1707.  
  1708. Said
  1709.  
  1710. tai@together.net
  1711. http://together.net/~tai/
  1712.  
  1713.  
  1714.  
  1715. +++++++++++++++++++++++++++
  1716.  
  1717. >From Francois-Regis.Degott@imag.fr (F. Degott)
  1718. Date: 4 Apr 1995 15:49:47 GMT
  1719. Organization: LMC-IMAG Grenoble France
  1720.  
  1721. In article <3lrnp2$f41@bristlecone.together.net>, Said Kobeissi
  1722. <said.kobeissi@together.org> wrote:
  1723.  
  1724. >     ChangedResource(prefDlg);
  1725. >     if(!CheckOS(ResError()))
  1726. >        return FALSE;
  1727. >     UpdateResFile(CurResFile());
  1728. >     if(!CheckOS(ResError()))
  1729. >        return FALSE;
  1730. >     done = TRUE;
  1731. > I click on done, and then when I choose that dialog box again, it still 
  1732. > doesn't have any boxes checked :( Can anyone help me? Thanks tons! =P
  1733.  
  1734. Hi Said,
  1735.  
  1736. i think that the state of the check boxes or radio buttons are not
  1737. described (or saved) in resource. Remark that, with resedit, it isn't possible
  1738. to predefine the state of these controls...
  1739. I think that it's up to you to save and read  'manually' the ctrl states
  1740. in your resource file.
  1741.  
  1742. Hope this helps.
  1743. Bye.
  1744. FR.
  1745. __________________________________________
  1746. F.R. Degott  (Francois-Regis.Degott@imag.fr)
  1747. Lab. LMC-IMAG - Univ. Joseph Fourier - Grenoble - France
  1748.  
  1749. +++++++++++++++++++++++++++
  1750.  
  1751. >From kurisuto@babel.ling.upenn.edu (Sean Crist)
  1752. Date: 4 Apr 1995 16:28:48 GMT
  1753. Organization: University of Pennsylvania, Linguistics Department
  1754.  
  1755. In article <3lrnp2$f41@bristlecone.together.net>,
  1756. Said Kobeissi  <said.kobeissi@together.org> wrote:
  1757. >Hi everyone,
  1758. >
  1759. >  Got a question about saving check boxes. I have a dialog box that has 
  1760. >some check boxes. I want to save the settings between runs of the 
  1761. >application.  How does one write which boxes are set to the resource 
  1762. >file? I want to save them if the user presses done, and not save if the 
  1763. >user presses cancel. So I assume there is something I have to do in the 
  1764. >'donebutton' case, but I can't figure out what.  I have tried  the 
  1765. >following, but seem to be missing something:
  1766. >
  1767. >    ChangedResource(prefDlg);
  1768. >    if(!CheckOS(ResError()))
  1769. >       return FALSE;
  1770. >    UpdateResFile(CurResFile());
  1771. >    if(!CheckOS(ResError()))
  1772. >       return FALSE;
  1773. >    done = TRUE;
  1774. >
  1775. >
  1776. >I click on done, and then when I choose that dialog box again, it still 
  1777. >doesn't have any boxes checked :( Can anyone help me? Thanks tons! =P
  1778.  
  1779. The representation of dialog items in the DITL is not the same as
  1780. their representation in memory when you open a dialog; when you open a
  1781. dialog, the Toolbox parses the DITL and uses that information to decide
  1782. when to call NewControl, etc.  There's no place in the DITL to represent
  1783. the value of a control, so you can't store control values in a DITL.
  1784.  
  1785. But even if this were possible, I think it would be the wrong way to
  1786. approach the problem.  User interface items (controls, menus, etc.) are
  1787. _not_ the place to store your data; they are just the interface between
  1788. your data and the user.  For example, a checkbox represents a boolean value
  1789. (on or off).  I think the right way to do this is to declare a boolean
  1790. variable where you keep track of this value.  When the user clicks in the
  1791. control, you change the value of the boolean (and, of course, change the
  1792. value of the control).  When you open the dialog to start with, look at the
  1793. value of your boolean and use it to set the value of the control correctly.
  1794.  
  1795. To rephrase your question, how can you save a boolean value?  Well, one way
  1796. is to make your own private kind of resource that stores the values you
  1797. want to save.  This is pretty easy to do, as long as you have a reasonable
  1798. understanding of how to use the resource manager: basically, you declare
  1799. whatever kind of record you want, make a handle to that record, and then
  1800. AddResource it (there's lots more, but it would be better just to read the
  1801. Resource Manager chapters of IM.)
  1802.  
  1803.   \/ __ __    _\_     --Sean Crist  (kurisuto@unagi.cis.upenn.edu)
  1804.  ---  |  |    \ /     For a free copy of the Bill of Rights, finger
  1805.   _| ,| ,|   -----       this account.
  1806.   _| ,| ,|    [_]     Q: What do Standard Oil, AT&T, and Microsoft have in
  1807.    |  |  |    [_]        common?   A:  Nothing... yet.
  1808.  
  1809.  
  1810.  
  1811. +++++++++++++++++++++++++++
  1812.  
  1813. >From dstone@alchemy.chem.utoronto.ca (David Stone)
  1814. Date: Tue, 4 Apr 1995 16:24:58 GMT
  1815. Organization: University of Toronto Chemistry
  1816.  
  1817. In article <3lrnp2$f41@bristlecone.together.net>, Said Kobeissi
  1818. <said.kobeissi@together.org> wrote:
  1819. > Hi everyone,
  1820. >   Got a question about saving check boxes. I have a dialog box that has 
  1821. > some check boxes. I want to save the settings between runs of the 
  1822. > application.  How does one write which boxes are set to the resource 
  1823. > file? I want to save them if the user presses done, and not save if the 
  1824. > user presses cancel. So I assume there is something I have to do in the 
  1825. > 'donebutton' case, but I can't figure out what.  I have tried  the 
  1826. > following, but seem to be missing something:
  1827. >     ChangedResource(prefDlg);
  1828. >     if(!CheckOS(ResError()))
  1829. >        return FALSE;
  1830. >     UpdateResFile(CurResFile());
  1831. >     if(!CheckOS(ResError()))
  1832. >        return FALSE;
  1833. >     done = TRUE;
  1834. > I click on done, and then when I choose that dialog box again, it still 
  1835. > doesn't have any boxes checked :( Can anyone help me? Thanks tons! =P
  1836. > Said
  1837. > tai@together.net
  1838. > http://together.net/~tai/
  1839.  
  1840. Probably it doesn't touch the individual 'DITL' items - maybe just the
  1841. 'DLOG' template?
  1842.  
  1843. I use Booleans to keep track of my checkboxes, allowing me to store
  1844. the settings in preferences files (that way, different users can maintain
  1845. their own settings..)
  1846.  
  1847. To set the checkbox before displaying the dialog, I get the item handle
  1848. from GetDItem and cast as a ControlHandle, then
  1849.  
  1850.   SetCtlValue(cHndl,(isChecked ? 1 : 0));
  1851.  
  1852. where isChecked is my boolean.  If the user leaves the dialog using
  1853. the cancel button or escape sequence (cmd-period etc) I do nothing,
  1854. otherwise I repeat the process and reset the boolean
  1855.  
  1856.   isChecked = (GetCtlValue(cHdnl) == 1);
  1857.  
  1858. All my preference settings are further defined in structs to allow
  1859. easy reading/writing to files, updating to default settings etc.
  1860.  
  1861. Hope that helps!
  1862.  
  1863. Dave Stone
  1864.  
  1865. +++++++++++++++++++++++++++
  1866.  
  1867. >From woody@alumni.cco.caltech.edu (William Edward Woody)
  1868. Date: Tue, 04 Apr 1995 13:11:41 -0800
  1869. Organization: In Phase Consulting
  1870.  
  1871. In article <3lrnp2$f41@bristlecone.together.net>, Said Kobeissi
  1872. <said.kobeissi@together.org> wrote:
  1873.  
  1874. > Hi everyone,
  1875. >   Got a question about saving check boxes. I have a dialog box that has 
  1876. > some check boxes. I want to save the settings between runs of the 
  1877. > application.  How does one write which boxes are set to the resource 
  1878. > file? I want to save them if the user presses done, and not save if the 
  1879. > user presses cancel. So I assume there is something I have to do in the 
  1880. > 'donebutton' case, but I can't figure out what.  I have tried  the 
  1881. > following, but seem to be missing something:
  1882. >     ChangedResource(prefDlg);
  1883. >     if(!CheckOS(ResError()))
  1884. >        return FALSE;
  1885. >     UpdateResFile(CurResFile());
  1886. >     if(!CheckOS(ResError()))
  1887. >        return FALSE;
  1888. >     done = TRUE;
  1889.  
  1890. You really don't want to save the settings in the resource fork of your
  1891. application.
  1892.  
  1893. You want to put that data into a preferences file, and put the preferences
  1894. file in the preferences folder of your system.
  1895.  
  1896. (For more information on locating the preferences folder, refer to the
  1897. function FindFolder in 'Inside Macintosh: Macintosh Toolbox Essentials,
  1898. pg 7-54.)
  1899.  
  1900. -- 
  1901. William Edward Woody     |  e-mail: woody@alumni.cco.caltech.edu
  1902. In Phase Consulting      |  WWW:    http://alumni.caltech.edu/~woody
  1903. 337 West California #4   |  Fax:    (818) 502-1467
  1904. Glendale, CA 91203       |  ICBM:   N:34.4' W:118.15'
  1905.  
  1906. ---------------------------
  1907.  
  1908. >From pmold@netcom.com (Paul Moldenhauer)
  1909. Subject: What are the names of my serial ports? (CTB)
  1910. Date: Fri, 31 Mar 1995 20:32:33 GMT
  1911. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  1912.  
  1913. I am writing an application that uses the Communications Toolbox.  I am
  1914. configuring the Apple Modem Tool with a configuration string.  At first I
  1915. assumed that the modem would be on the "Modem Port".  Worked fine on most
  1916. of the Mac's, until I tried it on a Duo 280 with the internal express modem.
  1917. Turns out that the "Modem Port" doesn't appear to even exist.  I see only a
  1918. "Printer/Modem Port" and an "Internal Modem".
  1919.  
  1920. Here's my question:  How can I find out the name of the port to use?
  1921.  
  1922. I don't want the user to have to configure the Apple Modem Tool through the
  1923. CMChooser().  Basically, I need to know whether to use "Modem Port" or
  1924. "Internal Modem".  I found a trap called ModemStatus() under the Power 
  1925. manager, but it must not be implemented on non-portables because I get an
  1926. unimplimented trap error.  I don't know the trap number, so I can't do a
  1927. NGetTrapAddress().
  1928.  
  1929. Any suggestions would be gladly excepted.
  1930.  
  1931.  
  1932. Paul Moldenhauer
  1933. pmold@netcom.com
  1934.  
  1935. +++++++++++++++++++++++++++
  1936.  
  1937. >From oster@netcom.com (David Phillip Oster)
  1938. Date: Mon, 3 Apr 1995 21:04:59 GMT
  1939. Organization: Netcom Online Communications Services (408-241-9760 login: guest)
  1940.  
  1941. In article <pmoldD6BnqA.Aw1@netcom.com> pmold@netcom.com (Paul Moldenhauer) writes:
  1942. >I am writing an application that uses the Communications Toolbox.  I am
  1943. >configuring the Apple Modem Tool with a configuration string.  At first I
  1944. >assumed that the modem would be on the "Modem Port".  Worked fine on most
  1945. >of the Mac's, until I tried it on a Duo 280 with the internal express modem.
  1946. >Turns out that the "Modem Port" doesn't appear to even exist.  I see only a
  1947. >"Printer/Modem Port" and an "Internal Modem".
  1948.  
  1949. You should always ask the user what port to use. I have 2 4-port cards on
  1950. my nubus and I get so pissed off at products like 
  1951.  
  1952. the Connectix eyeball camera or 
  1953. the Miracle MIDI interface or 
  1954. the X-10 CP290 home controller, or 
  1955. the Kurta PenMouse tablet or
  1956. applelink
  1957.  
  1958. that insist on being on either the modem or the printer serial port..
  1959.  
  1960. Come on people! Hre is the code, again, for finding our what ports
  1961. exist:
  1962.  
  1963. /* main.c - Using Connection Resource Manager, print all the portnames.
  1964.  */
  1965. #include <stdio.h>
  1966. #include <CRMSerialDevices.h>
  1967. #include <CommResources.h>
  1968.  
  1969. #define Length(s)       ((int) (s)[0])
  1970.  
  1971. main()
  1972. {
  1973.         CRMRecPtr               crp;
  1974.         CRMRec                  crm;
  1975.         CRMSerialPtr    csp;
  1976.         StringPtr               s;
  1977.         FILE                    *out;
  1978.  
  1979.         InitCRM();
  1980.  
  1981.         crm.qLink = NULL;
  1982.         crm.qType = crmType;
  1983.         crm.crmVersion = crmRecVersion;
  1984.         crm.crmPrivate = 0;
  1985.         crm.crmReserved = 0;
  1986.         crm.crmDeviceType = crmSerialDevice;
  1987.         crm.crmDeviceID = 0;
  1988.         crm.crmAttributes = 0;
  1989.         crm.crmStatus = 0;
  1990.         crm.crmRefCon = 0;
  1991.         crp = &crm;
  1992.         if(NULL == (out = fopen("log", "w"))){
  1993.                 return -1;
  1994.         }
  1995.         while(NULL != (crp = CRMSearch(crp))){
  1996.                 if(NULL != (csp = (CRMSerialPtr) crp->crmAttributes)){
  1997.                         if(NULL != (s = *csp->inputDriverName)){
  1998.                                 fprintf(out, "\"%.*s\"\n", Length(s), &s[1]);
  1999.                         }
  2000.                         if(NULL != (s = *csp->outputDriverName)){
  2001.                                 fprintf(out, "\"%.*s\"\n", Length(s), &s[1]);
  2002.                         }
  2003.                 }
  2004.         }
  2005.         return 0;
  2006. }
  2007. -- 
  2008. - ------- <mail-to:oster@netcom.com> ----------
  2009. Ahh! The thorazine is wearing off and the odinazine is coming on...
  2010.  
  2011. ---------------------------
  2012.  
  2013. End of C.S.M.P. Digest
  2014. **********************
  2015.